{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1 分析用户表\n",
    "\n",
    "读取数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>User-ID</th>\n",
       "      <th>Location</th>\n",
       "      <th>Age</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>nyc, new york, usa</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>stockton, california, usa</td>\n",
       "      <td>18.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>moscow, yukon territory, russia</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>porto, v.n.gaia, portugal</td>\n",
       "      <td>17.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>farnborough, hants, united kingdom</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   User-ID                            Location   Age\n",
       "0        1                  nyc, new york, usa   NaN\n",
       "1        2           stockton, california, usa  18.0\n",
       "2        3     moscow, yukon territory, russia   NaN\n",
       "3        4           porto, v.n.gaia, portugal  17.0\n",
       "4        5  farnborough, hants, united kingdom   NaN"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_user = pd.read_csv('../data/BX-Users.csv', sep=';')\n",
    "df_user.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 修改列名"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>location</th>\n",
       "      <th>age</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>nyc, new york, usa</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>stockton, california, usa</td>\n",
       "      <td>18.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>moscow, yukon territory, russia</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>porto, v.n.gaia, portugal</td>\n",
       "      <td>17.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>farnborough, hants, united kingdom</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   user_id                            location   age\n",
       "0        1                  nyc, new york, usa   NaN\n",
       "1        2           stockton, california, usa  18.0\n",
       "2        3     moscow, yukon territory, russia   NaN\n",
       "3        4           porto, v.n.gaia, portugal  17.0\n",
       "4        5  farnborough, hants, united kingdom   NaN"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_user.columns = ['user_id', 'location', 'age']\n",
    "df_user.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 分析 location"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "location_value_counts = df_user['location'].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "57339"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "location_value_counts.count()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 平均每个地区，存在的用户个数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4.863321648441723"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "location_value_counts.sum() / location_value_counts.count()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 把 location 变成国家"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_user['location'] = df_user['location'].apply(lambda location: location.rsplit(',', maxsplit=1)[-1].strip())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "709"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(df_user['location'].unique())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "location_value_counts = df_user['location'].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY0AAAD8CAYAAACLrvgBAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAGzhJREFUeJzt3X+wVPWZ5/H3x3u5IEYE9GocLg5kQ7KDJjshd5FMdp2UjIiOJU6VbmGlVmrWLWoSs5vsj0qwshVqk7ibzO6MWauMM4wywVRG4jiZkc3iEAp1s7sVf1yjUZEoV8zIDSrXgGj8heizf/TTcGz63NPcS9Otfl5VXX3Oc76nz9NUw4fz7dPdigjMzMxacVynGzAzs3cOh4aZmbXMoWFmZi1zaJiZWcscGmZm1jKHhpmZtcyhYWZmLXNomJlZyxwaZmbWst5ON3C0nXLKKTFnzpxOt2Fm9o7ywAMPPB8R/VXj3nWhMWfOHIaGhjrdhpnZO4qkf2hlnKenzMysZQ4NMzNrmUPDzMxa5tAwM7OWVYaGpLWSdkt6tMm2/ygpJJ2S65J0naRhSQ9LWlAYu0LS9rytKNQ/LumR3Oc6Scr6TEmbc/xmSTOOzlM2M7PxauVM4zvA0saipNnAecDThfIFwLy8rQRuyLEzgdXA2cBCYHUhBG7IsfX96sdaBWyJiHnAllw3M7MOqgyNiPgxsKfJpmuBLwLFn/5bBtwcNfcA0yWdDpwPbI6IPRGxF9gMLM1t0yLiJ1H7CcGbgUsKj7Uul9cV6mZm1iHjek9D0sXALyPiZw2bZgE7C+sjWRurPtKkDnBaRDwDkPenjqfXVm3Z9hzfvnu4nYcwM3vHO+LQkDQV+DLwlWabm9RiHPUj7WmlpCFJQ6Ojo0e6OwB3Pz7Kjf/nqXHta2b2XjGeM41/BMwFfibpF8AA8FNJ76d2pjC7MHYA2FVRH2hSB3gup6/I+91lDUXEmogYjIjB/v7KT8GXqs2QmZlZmSMOjYh4JCJOjYg5ETGH2j/8CyLiWWADcEVeRbUI2JdTS5uAJZJm5BvgS4BNue0lSYvyqqkrgNvzUBuA+lVWKwr1tpDGcYpjZvYe08olt7cAPwE+LGlE0pVjDN8I7ACGgb8APgsQEXuArwH35+2rWQP4DHBj7vMkcEfWvwGcJ2k7tau0vnFkT+3INJsnMzOzt6v8wsKIuLxi+5zCcgBXlYxbC6xtUh8CzmpS/xWwuKq/o8mzU2ZmY/MnwpMkv6dhZlbBoWFmZi1zaBT4PMPMbGwOjSTh1DAzq+DQSPL1U2ZmlRwaBT7RMDMbm0MjSf5EuJlZFYdG8uSUmVk1h0aBzzPMzMbm0Ei16alOd2Fm1t0cGil/ZdbMzMbg0CgIT1CZmY3JoZGEp6fMzKo4NOo8O2VmVsmhUeATDTOzsTk0kvBP95mZVXFoJF88ZWZWzaFR4KunzMzG5tBIvnrKzKxaZWhIWitpt6RHC7X/Junnkh6W9LeSphe2XS1pWNLjks4v1JdmbVjSqkJ9rqR7JW2X9H1JfVmfnOvDuX3O0XrSzZ9nOx/dzOzdoZUzje8ASxtqm4GzIuKjwBPA1QCS5gPLgTNzn29L6pHUA1wPXADMBy7PsQDfBK6NiHnAXuDKrF8J7I2IDwLX5ri28omGmdnYKkMjIn4M7Gmo/SgiDuTqPcBALi8D1kfE6xHxFDAMLMzbcETsiIj9wHpgmWrf3XEucFvuvw64pPBY63L5NmCx2vhdH0L+anQzswpH4z2NfwXckcuzgJ2FbSNZK6ufDLxQCKB6/W2Pldv35fi28PSUmVm1CYWGpC8DB4Dv1UtNhsU46mM9VrM+VkoakjQ0Ojo6dtNj8HmGmdnYxh0aklYAFwGfjkPzOiPA7MKwAWDXGPXngemSehvqb3us3H4SDdNkdRGxJiIGI2Kwv79/fM8HXz1lZlZlXKEhaSnwJeDiiHilsGkDsDyvfJoLzAPuA+4H5uWVUn3U3izfkGFzF3Bp7r8CuL3wWCty+VLgzvCbDmZmHdVbNUDSLcCngFMkjQCrqV0tNRnYnO9N3xMRfxQRWyXdCjxGbdrqqoh4Mx/nc8AmoAdYGxFb8xBfAtZL+jrwIHBT1m8CvitpmNoZxvKj8HzHeqJtfXgzs3eDytCIiMublG9qUquPvwa4pkl9I7CxSX0HtaurGuuvAZdV9Xe0ODLMzKr5E+ENPANmZlbOoZHqs1PODDOzcg6NJE9QmZlVcmg08ImGmVk5h0Y6ND3l2DAzK+PQSJ6cMjOr5tBo4PMMM7NyDo3kq6fMzKo5NFIbv3XdzOxdw6HRwL8TbmZWzqHRwNNTZmblHBrJs1NmZtUcGmZm1jKHRqp/jYinp8zMyjk0kqenzMyqOTQa+OopM7NyDo1UP9Hw9JSZWTmHRvL0lJlZNYdGA59omJmVc2ikQ1dPOTbMzMpUhoaktZJ2S3q0UJspabOk7Xk/I+uSdJ2kYUkPS1pQ2GdFjt8uaUWh/nFJj+Q+1ym/BKrsGO3i6Skzs2qtnGl8B1jaUFsFbImIecCWXAe4AJiXt5XADVALAGA1cDawEFhdCIEbcmx9v6UVx2grn2eYmZWrDI2I+DGwp6G8DFiXy+uASwr1m6PmHmC6pNOB84HNEbEnIvYCm4GluW1aRPwkavNCNzc8VrNjtJVnp8zMyo33PY3TIuIZgLw/NeuzgJ2FcSNZG6s+0qQ+1jEOI2mlpCFJQ6Ojo+N6Qv5qdDOzakf7jfBm//LGOOpHJCLWRMRgRAz29/cf6e4TPLqZ2XvHeEPjuZxaIu93Z30EmF0YNwDsqqgPNKmPdYy2OPjhPqeGmVmp8YbGBqB+BdQK4PZC/Yq8imoRsC+nljYBSyTNyDfAlwCbcttLkhblVVNXNDxWs2O0hWenzMyq9VYNkHQL8CngFEkj1K6C+gZwq6QrgaeBy3L4RuBCYBh4BfhDgIjYI+lrwP057qsRUX9z/TPUrtA6Hrgjb4xxjLbyG+FmZuUqQyMiLi/ZtLjJ2ACuKnmctcDaJvUh4Kwm9V81O0a7+ETDzKyaPxHewCcaZmblHBqpfsmtv0bEzKycQyP5jXAzs2oOjQY+zzAzK+fQSP4RJjOzag6NOs9PmZlVcmg08CfCzczKOTTSwfMMZ4aZWSmHRvLslJlZNYdGA59omJmVc2ikQ78R3uFGzMy6mEMjeXrKzKyaQ6OBr54yMyvn0Ej+cJ+ZWTWHRvL0lJlZNYdGA59omJmVc2ikQ1dPOTbMzMo4NOo8PWVmVsmh0cAnGmZm5SYUGpL+naStkh6VdIukKZLmSrpX0nZJ35fUl2Mn5/pwbp9TeJyrs/64pPML9aVZG5a0aiK9Vj6Xdj64mdm7xLhDQ9Is4N8CgxFxFtADLAe+CVwbEfOAvcCVucuVwN6I+CBwbY5D0vzc70xgKfBtST2SeoDrgQuA+cDlObYt5MunzMwqTXR6qhc4XlIvMBV4BjgXuC23rwMuyeVluU5uX6zav9TLgPUR8XpEPAUMAwvzNhwROyJiP7A+x7aVp6fMzMqNOzQi4pfAfweephYW+4AHgBci4kAOGwFm5fIsYGfueyDHn1ysN+xTVm+Lgx/u80W3ZmalJjI9NYPa//znAr8BnEBtKqlR/V/hZvM/MY56s15WShqSNDQ6OlrVelOenTIzqzaR6anfA56KiNGIeAP4AfA7wPScrgIYAHbl8ggwGyC3nwTsKdYb9imrHyYi1kTEYEQM9vf3T+ApeXrKzGwsEwmNp4FFkqbmexOLgceAu4BLc8wK4PZc3pDr5PY7o/ZJug3A8ry6ai4wD7gPuB+Yl1dj9VF7s3zDBPodU/1Mw5lhZlaut3pIcxFxr6TbgJ8CB4AHgTXA/wLWS/p61m7KXW4CvitpmNoZxvJ8nK2SbqUWOAeAqyLiTQBJnwM2Ubsya21EbB1vv1Xki27NzCqNOzQAImI1sLqhvIPalU+NY18DLit5nGuAa5rUNwIbJ9LjkfLXiJiZlfMnwpOnp8zMqjk0zMysZQ6NBp6dMjMr59BI/hoRM7NqDo3D+FTDzKyMQyP5N8LNzKo5NJJnp8zMqjk0GvhEw8ysnEMjHfqN8A43YmbWxRwaydNTZmbVHBoN/HsaZmblHBrJV0+ZmVVzaCRPT5mZVXNoNPCZhplZOYfGQXn1lN/TMDMr5dBInp4yM6vm0Gjg6Skzs3IOjeQTDTOzag6N5K9GNzOrNqHQkDRd0m2Sfi5pm6RPSJopabOk7Xk/I8dK0nWShiU9LGlB4XFW5PjtklYU6h+X9Ejuc52Owb/snp4yMys30TON/wH8fUT8Y+CfANuAVcCWiJgHbMl1gAuAeXlbCdwAIGkmsBo4G1gIrK4HTY5ZWdhv6QT7LXXww32+esrMrNS4Q0PSNOAc4CaAiNgfES8Ay4B1OWwdcEkuLwNujpp7gOmSTgfOBzZHxJ6I2AtsBpbmtmkR8ZOICODmwmMddZ6dMjOrNpEzjQ8Ao8BfSnpQ0o2STgBOi4hnAPL+1Bw/C9hZ2H8ka2PVR5rU28rTU2Zm5SYSGr3AAuCGiPgY8DKHpqKaafZ/+RhH/fAHllZKGpI0NDo6OnbXZc1pjAOYmRkwsdAYAUYi4t5cv41aiDyXU0vk/e7C+NmF/QeAXRX1gSb1w0TEmogYjIjB/v7+cT0Z+aJbM7NK4w6NiHgW2Cnpw1laDDwGbADqV0CtAG7P5Q3AFXkV1SJgX05fbQKWSJqRb4AvATbltpckLcqrpq4oPFbbhOenzMxK9U5w/38DfE9SH7AD+ENqQXSrpCuBp4HLcuxG4EJgGHglxxIReyR9Dbg/x301Ivbk8meA7wDHA3fkrT08PWVmVmlCoRERDwGDTTYtbjI2gKtKHmctsLZJfQg4ayI9tsqTU2Zm1fyJ8AaenTIzK+fQSIc+bO7UMDMr49BInp4yM6vm0Gjg6Skzs3IOjeSvETEzq+bQaOATDTOzcg6NVP9EuKenzMzKOTSSp6fMzKo5NBr4a0TMzMo5NJI/pWFmVs2hUefpKTOzSg6NBp6dMjMr59BIB6+e8gSVmVkph0by1VNmZtUcGo18omFmVsqhkXz1lJlZNYdGkuenzMwqOTQa+OopM7NyDo2kg78R7tQwMyvj0EienDIzqzbh0JDUI+lBST/M9bmS7pW0XdL3JfVlfXKuD+f2OYXHuDrrj0s6v1BfmrVhSasm2msrPD1lZlbuaJxpfB7YVlj/JnBtRMwD9gJXZv1KYG9EfBC4NschaT6wHDgTWAp8O4OoB7geuACYD1yeY9vi0PSUmZmVmVBoSBoAfh+4MdcFnAvclkPWAZfk8rJcJ7cvzvHLgPUR8XpEPAUMAwvzNhwROyJiP7A+x7aJJ6jMzKpM9EzjW8AXgbdy/WTghYg4kOsjwKxcngXsBMjt+3L8wXrDPmX1w0haKWlI0tDo6OiEnpC/Gt3MrNy4Q0PSRcDuiHigWG4yNCq2HWn98GLEmogYjIjB/v7+Mbou5+kpM7NqvRPY95PAxZIuBKYA06ideUyX1JtnEwPArhw/AswGRiT1AicBewr1uuI+ZfWjzpNTZmbVxn2mERFXR8RARMyh9kb2nRHxaeAu4NIctgK4PZc35Dq5/c6ozQVtAJbn1VVzgXnAfcD9wLy8Gqsvj7FhvP22/sTafgQzs3esiZxplPkSsF7S14EHgZuyfhPwXUnD1M4wlgNExFZJtwKPAQeAqyLiTQBJnwM2AT3A2ojY2oZ+yWMB/nCfmdlYjkpoRMTdwN25vIPalU+NY14DLivZ/xrgmib1jcDGo9FjFU9PmZlV8yfCG/jiKTOzcg6NdPDqKYeGmVkph0aSJ6jMzCo5NBr4RMPMrJxDIx2annJsmJmVcWiYmVnLHBoNfJ5hZlbOoZH8E+FmZtUcGg38loaZWTmHRjp0ya1Tw8ysjEMjeXrKzKyaQ6OBp6fMzMo5NJJ/hMnMrJpDI/lrRMzMqjk0Gnh6ysysnEMjHZqecmqYmZVxaCRPTpmZVXNoNPD0lJlZOYdG8tVTZmbVxh0akmZLukvSNklbJX0+6zMlbZa0Pe9nZF2SrpM0LOlhSQsKj7Uix2+XtKJQ/7ikR3Kf66R2fgTPE1RmZlUmcqZxAPgPEfFbwCLgKknzgVXAloiYB2zJdYALgHl5WwncALWQAVYDZwMLgdX1oMkxKwv7LZ1Av2Pq66n9Ubz+xpvtOoSZ2TveuEMjIp6JiJ/m8kvANmAWsAxYl8PWAZfk8jLg5qi5B5gu6XTgfGBzROyJiL3AZmBpbpsWET+J2i8j3Vx4rKOu/8TJAIz++vV2HcLM7B3vqLynIWkO8DHgXuC0iHgGasECnJrDZgE7C7uNZG2s+kiTelsc39fDiZN72f2iQ8PMrMyEQ0PS+4C/Ab4QES+ONbRJLcZRb9bDSklDkoZGR0erWi7VP20yoy85NMzMykwoNCRNohYY34uIH2T5uZxaIu93Z30EmF3YfQDYVVEfaFI/TESsiYjBiBjs7+8f9/M57cQpPLPv1XHvb2b2bjeRq6cE3ARsi4g/LWzaANSvgFoB3F6oX5FXUS0C9uX01SZgiaQZ+Qb4EmBTbntJ0qI81hWFx2qLD532Ph5/9iXeessX3pqZNTORM41PAv8SOFfSQ3m7EPgGcJ6k7cB5uQ6wEdgBDAN/AXwWICL2AF8D7s/bV7MG8BngxtznSeCOCfRb6SMD03l5/5vseP7ldh7GzOwdq3e8O0bE/6X8ww2Lm4wP4KqSx1oLrG1SHwLOGm+PR2r2jOMBeHbfa3zw1Pcdq8Oamb1j+BPhBTNP6ANgzyv7O9yJmVl3cmgUzMjQ2PuyQ8PMrBmHRsH04ycBsNdnGmZmTTk0Cnp7juOk4yf5TMPMrIRDo8Fp0yazc68/q2Fm1oxDo8FHB6bz0M4XCP+whpnZYRwaDf75vFPY8/J+fvTYc51uxcys6zg0Glz00d+g9zjx8MgLnW7FzKzrODQa9Bwnpvb18PLr/l0NM7NGDo0mpvb18up+h4aZWSOHRhNTJ/fw8v4DnW7DzKzrODSamNrXwys+0zAzO4xDo4mpfb284jMNM7PDODSaOMFnGmZmTTk0mqidaTg0zMwaOTSamNrXwyuve3rKzKyRQ6OJk46fxK9e3s/+A291uhUzs67i0GhicM5MXj/wFn/+v5/kwJsODjOzOodGE+d86BQWnDGdP9n8BF/ZsLXT7ZiZdY2uDw1JSyU9LmlY0qpjccypfb389R/9Dh+ZdRL/86FdvH7Ab4qbmUGXh4akHuB64AJgPnC5pPnH4tg9x4l/8U9n89LrB/jdP76b/3rHNv7+0WfZ/dJr/tp0M3vP6u10AxUWAsMRsQNA0npgGfDYsTj4pxeewWknTuav7nuaNT/eQT0rpkw6jjknn8Dvf+R0TjtpCtOmTGJqXw9T+3qYMqmH4+v3k3qYMuk4jpOo9V/bXzSug+pj8tgHt9UXzMy6QLeHxixgZ2F9BDj7WB38uOPEkjPfz5Iz38+Lr73BQ0+/wJOjv+aXe19l02PP8iebnzhWrRzUUtBQGNSwvVlg0eSxaHacin1U2PnwsW/vreyx3rathX2a9dv4eGbvFf/lDz7Cwrkz23qMbg+NZn/zD5sbkrQSWAlwxhlntKWRaVMmcc6H+jnnQ/0A/KeL5vPK/gP86tf7efG1N3h1/5u8vP9NXnvj0O3V/W/y2oG3eCuCxhmt+hRXxKEnVB8TRMP62wdEC2Mbt/O247S2T7HnKBy7qtdD+zVsa2GfYr9vP97hxy/bdvgrxOy94YTJPW0/RreHxggwu7A+AOxqHBQRa4A1AIODg8fsn4ypfb1Mndntf4RmZkdPV78RDtwPzJM0V1IfsBzY0OGezMzes7r6v8kRcUDS54BNQA+wNiL8wQkzsw7p6tAAiIiNwMZO92FmZt0/PWVmZl3EoWFmZi1zaJiZWcscGmZm1jKHhpmZtUzvti/fkzQK/MM4dz8FeP4ottNO7rU93Gt7uNf2OJq9/mZE9FcNeteFxkRIGoqIwU730Qr32h7utT3ca3t0oldPT5mZWcscGmZm1jKHxtut6XQDR8C9tod7bQ/32h7HvFe/p2FmZi3zmYaZmbXMoZEkLZX0uKRhSau6oJ+1knZLerRQmylps6TteT8j65J0Xfb+sKQFx7DP2ZLukrRN0lZJn+/iXqdIuk/Sz7LX/5z1uZLuzV6/n1/Dj6TJuT6c2+ccq14LPfdIelDSD7u5V0m/kPSIpIckDWWt614Defzpkm6T9PN83X6iG3uV9OH886zfXpT0hY73GhHv+Ru1r11/EvgA0Af8DJjf4Z7OARYAjxZqfwysyuVVwDdz+ULgDmq/dLgIuPcY9nk6sCCXTwSeAOZ3aa8C3pfLk4B7s4dbgeVZ/zPgM7n8WeDPcnk58P0OvA7+PfBXwA9zvSt7BX4BnNJQ67rXQB5/HfCvc7kPmN6tvRZ67gGeBX6z070e8yffjTfgE8CmwvrVwNVd0NechtB4HDg9l08HHs/lPwcubzauAz3fDpzX7b0CU4GfUvvN+eeB3sbXArXfcflELvfmOB3DHgeALcC5wA/zH4Nu7bVZaHTdawCYBjzV+GfTjb029LcE+H/d0Kunp2pmATsL6yNZ6zanRcQzAHl/ata7ov+cEvkYtf/Bd2WvOd3zELAb2EztDPOFiDjQpJ+Dveb2fcDJx6pX4FvAF4G3cv1kurfXAH4k6QFJK7PWja+BDwCjwF/mtN+Nkk7o0l6LlgO35HJHe3Vo1KhJ7Z10WVnH+5f0PuBvgC9ExItjDW1SO2a9RsSbEfHb1P4XvxD4rTH66Vivki4CdkfEA8XyGP10+jXwyYhYAFwAXCXpnDHGdrLXXmrTvjdExMeAl6lN8ZTp9J8r+b7VxcBfVw1tUjvqvTo0akaA2YX1AWBXh3oZy3OSTgfI+91Z72j/kiZRC4zvRcQPurnXuoh4Abib2tzvdEn1X7Es9nOw19x+ErDnGLX4SeBiSb8A1lObovpWl/ZKROzK+93A31IL5G58DYwAIxFxb67fRi1EurHXuguAn0bEc7ne0V4dGjX3A/PyypQ+aqeCGzrcUzMbgBW5vILa+wf1+hV59cQiYF/99LXdJAm4CdgWEX/a5b32S5qey8cDvwdsA+4CLi3ptf4cLgXujJwsbreIuDoiBiJiDrXX450R8elu7FXSCZJOrC9Tm39/lC58DUTEs8BOSR/O0mLgsW7steByDk1N1XvqXK/H+g2dbr1Ru/LgCWpz3F/ugn5uAZ4B3qD2P4grqc1RbwG25/3MHCvg+uz9EWDwGPb5z6idAj8MPJS3C7u0148CD2avjwJfyfoHgPuAYWpTAJOzPiXXh3P7Bzr0WvgUh66e6rpes6ef5W1r/e9PN74G8vi/DQzl6+DvgBld3OtU4FfASYVaR3v1J8LNzKxlnp4yM7OWOTTMzKxlDg0zM2uZQ8PMzFrm0DAzs5Y5NMzMrGUODTMza5lDw8zMWvb/AVYFzmsGEBvhAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(\n",
    "    range(len(location_value_counts)),\n",
    "    location_value_counts\n",
    ")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.pie(\n",
    "    location_value_counts,\n",
    "    labels = location_value_counts.index\n",
    ")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 分析 年龄"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>location</th>\n",
       "      <th>age</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>usa</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>russia</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>united kingdom</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>7</td>\n",
       "      <td>usa</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>8</td>\n",
       "      <td>canada</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   user_id        location  age\n",
       "0        1             usa  NaN\n",
       "2        3          russia  NaN\n",
       "4        5  united kingdom  NaN\n",
       "6        7             usa  NaN\n",
       "7        8          canada  NaN"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_user[\n",
    "    df_user['age'].isnull()\n",
    "].head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "user_id     110762\n",
       "location    110762\n",
       "age              0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_user[\n",
    "    df_user['age'].isnull()\n",
    "].count()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 278858 entries, 0 to 278857\n",
      "Data columns (total 3 columns):\n",
      "user_id     278858 non-null int64\n",
      "location    278858 non-null object\n",
      "age         168096 non-null float64\n",
      "dtypes: float64(1), int64(1), object(1)\n",
      "memory usage: 6.4+ MB\n"
     ]
    }
   ],
   "source": [
    "df_user.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>location</th>\n",
       "      <th>age</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>usa</td>\n",
       "      <td>18.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>portugal</td>\n",
       "      <td>17.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>6</td>\n",
       "      <td>usa</td>\n",
       "      <td>61.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>10</td>\n",
       "      <td>spain</td>\n",
       "      <td>26.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>11</td>\n",
       "      <td>australia</td>\n",
       "      <td>14.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    user_id   location   age\n",
       "1         2        usa  18.0\n",
       "3         4   portugal  17.0\n",
       "5         6        usa  61.0\n",
       "9        10      spain  26.0\n",
       "10       11  australia  14.0"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 年龄不为空\n",
    "df_user_age_notnull = df_user[~df_user['age'].isnull()]\n",
    "df_user_age_notnull.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 年龄值统计排序\n",
    "age_value_counts_sort_by_age = df_user_age_notnull['age'].value_counts().sort_index()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(\n",
    "    age_value_counts_sort_by_age.index,\n",
    "    age_value_counts_sort_by_age\n",
    ")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "# \n",
    "def divide_age(age):\n",
    "    \"\"\"\n",
    "    :return:\n",
    "        Nan, 0-6,>100 --> 0 年龄填写有误\n",
    "        7 - 12        --> 1 少儿\n",
    "        13 - 17       --> 2 青少年\n",
    "        18 - 45       --> 3 青年\n",
    "        46 - 69       --> 4 中年\n",
    "        70 - 100      --> 5 老年\n",
    "    \"\"\"\n",
    "    if np.isnan(age) or (age <= 6) or (age > 100):\n",
    "        return 0\n",
    "    if age >= 7 and age <= 12:\n",
    "        return 1\n",
    "    if age >= 13 and age <= 17:\n",
    "        return 2\n",
    "    if age >= 18 and age <= 45:\n",
    "        return 3\n",
    "    if age >= 46 and age <= 69:\n",
    "        return 4\n",
    "    if age >= 70 and age <= 100:\n",
    "        return 5\n",
    "df_user['age'] = df_user['age'].apply(divide_age)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>location</th>\n",
       "      <th>age</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>usa</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>usa</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>russia</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>portugal</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>united kingdom</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   user_id        location  age\n",
       "0        1             usa    0\n",
       "1        2             usa    3\n",
       "2        3          russia    0\n",
       "3        4        portugal    2\n",
       "4        5  united kingdom    0"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 查看数据\n",
    "df_user.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 分析年龄段"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.pie(\n",
    "    df_user['age'].value_counts().sort_index(),\n",
    "    labels = ['undefined', 'shaoer', 'qingshaonian', 'qingnian', 'zhongnian', 'laonian']\n",
    ")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 分析打分表\n",
    "\n",
    "#### 读取数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>User-ID</th>\n",
       "      <th>ISBN</th>\n",
       "      <th>Book-Rating</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>276725</td>\n",
       "      <td>034545104X</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>276726</td>\n",
       "      <td>0155061224</td>\n",
       "      <td>5.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>276727</td>\n",
       "      <td>0446520802</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>276729</td>\n",
       "      <td>052165615X</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>276729</td>\n",
       "      <td>0521795028</td>\n",
       "      <td>6.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   User-ID        ISBN  Book-Rating\n",
       "0   276725  034545104X          0.0\n",
       "1   276726  0155061224          5.0\n",
       "2   276727  0446520802          0.0\n",
       "3   276729  052165615X          3.0\n",
       "4   276729  0521795028          6.0"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_rating = pd.read_csv('../data/BX-Book-Ratings.csv', sep=';')\n",
    "df_rating.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>item_id</th>\n",
       "      <th>rating</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>276725</td>\n",
       "      <td>034545104X</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>276726</td>\n",
       "      <td>0155061224</td>\n",
       "      <td>5.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>276727</td>\n",
       "      <td>0446520802</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>276729</td>\n",
       "      <td>052165615X</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>276729</td>\n",
       "      <td>0521795028</td>\n",
       "      <td>6.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   user_id     item_id  rating\n",
       "0   276725  034545104X     0.0\n",
       "1   276726  0155061224     5.0\n",
       "2   276727  0446520802     0.0\n",
       "3   276729  052165615X     3.0\n",
       "4   276729  0521795028     6.0"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_rating.columns = ['user_id', 'item_id', 'rating']\n",
    "df_rating.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 1149780 entries, 0 to 1149779\n",
      "Data columns (total 3 columns):\n",
      "user_id    1149780 non-null int64\n",
      "item_id    1149780 non-null object\n",
      "rating     1149772 non-null float64\n",
      "dtypes: float64(1), int64(1), object(1)\n",
      "memory usage: 26.3+ MB\n"
     ]
    }
   ],
   "source": [
    "df_rating.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 删除有误数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 1149772 entries, 0 to 1149779\n",
      "Data columns (total 3 columns):\n",
      "user_id    1149772 non-null int64\n",
      "item_id    1149772 non-null object\n",
      "rating     1149772 non-null float64\n",
      "dtypes: float64(1), int64(1), object(1)\n",
      "memory usage: 35.1+ MB\n"
     ]
    }
   ],
   "source": [
    "df_rating = df_rating.dropna()\n",
    "df_rating.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 用户活跃度"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "user_value_counts = df_rating['user_id'].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(\n",
    "    range(len(user_value_counts)),\n",
    "    user_value_counts,\n",
    ")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 商品流行度分析"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "item_value_counts = df_rating['item_id'].value_counts()\n",
    "plt.plot(\n",
    "    range(len(item_value_counts)),\n",
    "    item_value_counts,\n",
    ")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 1149772 entries, 0 to 1149779\n",
      "Data columns (total 3 columns):\n",
      "user_id    1149772 non-null int64\n",
      "item_id    1149772 non-null object\n",
      "rating     1149772 non-null float64\n",
      "dtypes: float64(1), int64(1), object(1)\n",
      "memory usage: 35.1+ MB\n"
     ]
    }
   ],
   "source": [
    "df_rating.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 1149772 entries, 0 to 1149779\n",
      "Data columns (total 3 columns):\n",
      "user_id    1149772 non-null int64\n",
      "item_id    1149772 non-null object\n",
      "rating     1149772 non-null int64\n",
      "dtypes: int64(2), object(1)\n",
      "memory usage: 35.1+ MB\n"
     ]
    }
   ],
   "source": [
    "df_rating['rating'] = df_rating['rating'].astype(int)\n",
    "df_rating.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 合并用户表与打分表"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>location</th>\n",
       "      <th>age</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>usa</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>usa</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>russia</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>portugal</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>united kingdom</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   user_id        location  age\n",
       "0        1             usa    0\n",
       "1        2             usa    3\n",
       "2        3          russia    0\n",
       "3        4        portugal    2\n",
       "4        5  united kingdom    0"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_user.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>item_id</th>\n",
       "      <th>rating</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>276725</td>\n",
       "      <td>034545104X</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>276726</td>\n",
       "      <td>0155061224</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>276727</td>\n",
       "      <td>0446520802</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>276729</td>\n",
       "      <td>052165615X</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>276729</td>\n",
       "      <td>0521795028</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   user_id     item_id  rating\n",
       "0   276725  034545104X       0\n",
       "1   276726  0155061224       5\n",
       "2   276727  0446520802       0\n",
       "3   276729  052165615X       3\n",
       "4   276729  0521795028       6"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_rating.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>location</th>\n",
       "      <th>age</th>\n",
       "      <th>item_id</th>\n",
       "      <th>rating</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2</td>\n",
       "      <td>usa</td>\n",
       "      <td>3</td>\n",
       "      <td>0195153448</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>7</td>\n",
       "      <td>usa</td>\n",
       "      <td>0</td>\n",
       "      <td>034542252</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>8</td>\n",
       "      <td>canada</td>\n",
       "      <td>0</td>\n",
       "      <td>0002005018</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>8</td>\n",
       "      <td>canada</td>\n",
       "      <td>0</td>\n",
       "      <td>0060973129</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>8</td>\n",
       "      <td>canada</td>\n",
       "      <td>0</td>\n",
       "      <td>0374157065</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   user_id location  age     item_id  rating\n",
       "0        2      usa    3  0195153448       0\n",
       "1        7      usa    0   034542252       0\n",
       "2        8   canada    0  0002005018       5\n",
       "3        8   canada    0  0060973129       0\n",
       "4        8   canada    0  0374157065       0"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_data = pd.merge(\n",
    "    df_user,\n",
    "    df_rating,\n",
    "    on='user_id',\n",
    "    how='inner'\n",
    ")\n",
    "df_data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 1149772 entries, 0 to 1149771\n",
      "Data columns (total 5 columns):\n",
      "user_id     1149772 non-null int64\n",
      "location    1149772 non-null object\n",
      "age         1149772 non-null int64\n",
      "item_id     1149772 non-null object\n",
      "rating      1149772 non-null int64\n",
      "dtypes: int64(3), object(2)\n",
      "memory usage: 52.6+ MB\n"
     ]
    }
   ],
   "source": [
    "df_data.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 1149772 entries, 0 to 1149771\n",
      "Data columns (total 5 columns):\n",
      "user_id     1149772 non-null int64\n",
      "location    1149772 non-null object\n",
      "age         1149772 non-null int64\n",
      "item_id     1149772 non-null object\n",
      "rating      1149772 non-null int64\n",
      "dtypes: int64(3), object(2)\n",
      "memory usage: 52.6+ MB\n"
     ]
    }
   ],
   "source": [
    "df_data['age'] = df_data['age'].astype(int)\n",
    "df_data.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 保存表"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [],
   "source": [
    "import _pickle as cPickle"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [],
   "source": [
    "cPickle.dump(\n",
    "    df_data,\n",
    "    open('../data/df_data.pkl', 'wb')\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [],
   "source": [
    "object1 = cPickle.load(\n",
    "    open('../data/df_data.pkl', 'rb')\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>location</th>\n",
       "      <th>age</th>\n",
       "      <th>item_id</th>\n",
       "      <th>rating</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2</td>\n",
       "      <td>usa</td>\n",
       "      <td>3</td>\n",
       "      <td>0195153448</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>7</td>\n",
       "      <td>usa</td>\n",
       "      <td>0</td>\n",
       "      <td>034542252</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>8</td>\n",
       "      <td>canada</td>\n",
       "      <td>0</td>\n",
       "      <td>0002005018</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>8</td>\n",
       "      <td>canada</td>\n",
       "      <td>0</td>\n",
       "      <td>0060973129</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>8</td>\n",
       "      <td>canada</td>\n",
       "      <td>0</td>\n",
       "      <td>0374157065</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   user_id location  age     item_id  rating\n",
       "0        2      usa    3  0195153448       0\n",
       "1        7      usa    0   034542252       0\n",
       "2        8   canada    0  0002005018       5\n",
       "3        8   canada    0  0060973129       0\n",
       "4        8   canada    0  0374157065       0"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "object1.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
